//package com.example.springai.langchat;
//
////import com.roy.ModelUtil;
//
//import dev.langchain4j.community.store.embedding.redis.RedisEmbeddingStore;
//import dev.langchain4j.data.embedding.Embedding;
//import dev.langchain4j.data.segment.TextSegment;
//import dev.langchain4j.model.embedding.EmbeddingModel;
////代码执⾏的结果为：
////这个数字就是从Redis的embedding-index索引中，找到了4条最为接近的记录，并计算出来的相似度。这个相
////似度越接近1，就表示这两个⽂本的语义越相似。
////接下来，可以演示⼀个简单的智能客服的场景，根据⽤户的问题，找到最接近的答案
//import dev.langchain4j.model.openai.OpenAiEmbeddingModel;
//import dev.langchain4j.model.output.Response;
//import dev.langchain4j.store.embedding.EmbeddingMatch;
//import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
//import dev.langchain4j.store.embedding.EmbeddingSearchResult;
//import dev.langchain4j.store.embedding.filter.comparison.IsEqualTo;
//import redis.clients.jedis.Jedis;
//
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
///**
// * Author： roy
// * Description：
// **/
//public class VectorSearchDemo {
//    public static void main(String[] args) {
//        EmbeddingModel embeddingModel = OpenAiEmbeddingModel.builder()
//                .baseUrl("https://api.siliconflow.cn/v1")
//                .apiKey("sk-nrvjihoykgbjabnelziszukgkcankraqcwtvohvpcuepuyyz").modelName("BAAI/bge-large-zh-v1.5").logRequests(true).logResponses(true)
//                .build();
//        Jedis jedis = new Jedis("127.0.0.1", 6379);
//        jedis.flushDB();  // 清空当前数据库
////        Response<Embedding> embed = embeddingModel.embed("");
//        RedisEmbeddingStore embeddingStore = RedisEmbeddingStore.builder()
//                .host("127.0.0.1")
//                .indexName("ceshi-index")
//                .dimension(1024)
//                .port(6379)
//                .build();
//
//
//// 创建元数据
////        Map<String, String> metadata = new HashMap<>();
////        metadata.put("text", "我的名字叫楼兰");
////        metadata.put("timestamp", String.valueOf(System.currentTimeMillis()));
////        metadata.put("source", "user_input");
//// 将嵌入向量和元数据存储到 Redis 中
//        TextSegment textSegment1 = TextSegment.textSegment("客服电话是400-8558558");
//        TextSegment textSegment2 = TextSegment.textSegment("客服⼯作时间是周⼀到周五");
//        TextSegment textSegment3 = TextSegment.textSegment("客服投诉电话是400-8668668");
//        Response<Embedding> embed1 = embeddingModel.embed(textSegment1);
//        Response<Embedding> embed2 = embeddingModel.embed(textSegment2);
//        Response<Embedding> embed3 = embeddingModel.embed(textSegment3);
////        // 存储向量
//        embeddingStore.add(embed1.content(), textSegment1);
//        embeddingStore.add(embed2.content(), textSegment2);
//        embeddingStore.add(embed3.content(), textSegment3);
////        embeddingStore.add("vec1",embed1.content());
////寻找最近的4条记录
//        EmbeddingSearchRequest build = EmbeddingSearchRequest.builder().queryEmbedding(embed1.content()).build();
//        Response<Embedding> embed5 = embeddingModel.embed("联系方式是什么");
//        // 查询
//        List<EmbeddingMatch<TextSegment>> result =
//                embeddingStore.findRelevant(embed5.content(), 5);
//
//
////        EmbeddingSearchRequest.builder().queryEmbedding(embed5.content()).filter(new IsEqualTo("source", "user_input"));
//
//        System.out.println(result+"111");
////        List<EmbeddingMatch<TextSegment>> matches = result1.matches();
////        System.out.println("matches = " + matches);
//        for (EmbeddingMatch<TextSegment> embeddingMatch : result) {
//            System.out.println(embeddingMatch.embedded().text() + ",分数为：" +
//                    embeddingMatch.score());
//        }
//
//    }
////    public static void ad() {
////    }
//}